[ワークショップレポート] Amazon Aurora DSQL を使用したマルチリージョンの Active-Active アプリケーションを構築する #DAT421-NEW #AWSreInvent
ウィスキー、シガー、パイプをこよなく愛する大栗です。
AWS re:Invent 2024 の Keynote にラスベガス現地で参加していました。目玉発表の一つである Amazon Aurora DSQL でマルチリージョンのアプリケーションを構築するワークショップに参加したためレポートします。
[NEW LAUNCH] Build a multi-Region, active-active rewards app with Amazon Aurora DSQL
概要
このワークショップではアクティブ/アクティブの高可用性を実現する新しいサーバーレス分散 SQL データベースである Amazon を実際に体験します。複数の AZ と2個のリージョンに渡ってアクティブ/アクティブの回復力を備えた小売ポイントアプリケーションを構築する方法を学びます。Aurora DSQL で ACID トランザクションとアクティブ/アクティブ レプリケーションがどのように機能するかを調べます。データモデルとアプリケーション設計のベストプラクティスなどを見つけます。参加にはノートパソコンの持参を持参する必要があります。
事前説明
本日のゴールは
- 簡単なクラスタの作成
- DSQL の調査
- 同期双方向レプリケーション
- 楽観的同時実行
- データモデリングのベストプラクティス
- スキーマ作成とデータのロード
- ポイントアプリを通してアクティブ/アクティブを調査
- コードでのトランザクションパターンの学習
です。
なぜAurora DSQLを構築したのか?
ずっと SQL データベースを DynamoDB と同じように簡単に使えるようにしてほしいという要望があった。データベースとサーバーレスの間に素晴らしいステップを作りたいと考えた。
DynamoDB for SQL Applications
使用感は?
PostgreSQL にとても似ています。
何を考慮する必要がある?
考慮すべき重要な点は楽観的同時実行制御です。
何を考慮する必要がない?
他の分散 SQL データベースと異なりシャーディングを行い、インスタンスが全くありません。パッチ適用もありません。本質的には DynamoDB のように扱います。
ワークショップの内容
本ワークショップは AWS Workshop Studio で実施しました。
はじめに
1個目のリージョン(バージニア北部)と2個目のリージョン(オハイオ)で初期設定を行います。
Aurora DSQL の操作
DSQL のマルチリージョンクラスタを作成します。クラスタの作成は数分で済みます。作成後に管理者接続を行って、提供されたスクリプトに従いスキーマの作成とデータのロードを行います。
作成したデータモデルを調査します。DSQL にとって主キーは非常に重要で、パフォーマンス向上やデータ分散に使用します。主キーを指定しない場合には見えない UUID が割り当てられます。ホットな主キーを避けることが重要で、単調増加の整数を割り当てるのは非推奨です。また外部キーはサポートしていません。
一般的な JOIN やグループ化などはサポートしており、実行計画も確認できます。
楽観的同時実行制御を確認して、リージョン間のトランザクションが競合したときにロックされずにコミット時にエラーになることを確認します。
ポイントアプリの構築
Lambda と API Gateway を使用した環境を Amplify で構築したシステムを各々のリージョンに構築します。CloudFormation で構築するため手間はかかりません。
Aurora DSQL でのプログラミング
アプリケーションの内容を確認します。基本的な構築の概要や同時実行制御について確認します。楽観的同時実行制御でロックフリーであるため、コミット時に 40001 エラーが発生したらリトライを実行するコードが含まれています。リトライは Exponential Backoff(指数バックオフ)にジッターを組み合わせて、リトライタイミングをランダムにしています。
まとめ
ワークショップを行って、マルチリージョンクラスタが簡単に作成できることが分かりました。DSQL のマルチリージョンクラスタで楽観的同時実行制御を行う場合のコードも確認しました。
後片付け
Workshop Studio を使用しているので、リソースの削除などは必要ありませんでした。
さいごに
私にとって re:Invent 2024 最大の発表は Aurora DSQL だと思っていたのでワークショップに参加するために待機列に 1 時間以上並びました。新発表の時にブログのときに Aurora DSQL を実際に起動して軽く触っていたので使用感は分かっていたのですが、Aurora DSQL は DynamoDB for SQL Applications だという説明を受けて、コンセプトが理解できた気がします。楽観的同時実行制御でありロックができないという挙動は今まで PostgreSQL を使用していた方には奇妙に思われると思います。しかし、小規模アプリケーションで Lambda などから使用することを考えているデータベースだと理解できたので、今後の活用の場所の想像が膨らんでおりワクワクしています。